# 导入所需的库
import numpy as np
from PIL import Image

# --- 配置区 ---
# 包含串口数据的文本文件名
INPUT_FILE = 'pic.txt'
# 您希望生成的图片文件名
OUTPUT_FILE = '1.png'
# --- 配置结束 ---

def convert_text_to_image(input_path, output_path):
    """
    读取特定格式的文本文件，并将其转换为灰度图像。
    文件格式应为:
    第一行: "宽度,高度"
    后续行: 以空格分隔的像素值 (0-255)
    """
    print("开始转换...")
    print(f"正在读取文件: '{input_path}'")

    try:
        # 打开并读取文本文件的所有行
        with open(input_path, 'r') as f:
            lines = f.readlines()

        # 1. 解析第一行，获取图像的宽度和高度
        header = lines[0].strip()
        width_str, height_str = header.split(',')
        width, height = int(width_str), int(height_str)
        print(f"解析到图像尺寸: {width}x{height}")

        # 2. 读取所有像素数据
        all_pixels = []
        # 从第二行开始遍历
        for line in lines[1:]:
            # 将每一行的字符串按空格分割，并转换为整数
            pixel_values = [int(p) for p in line.strip().split()]
            all_pixels.extend(pixel_values) # 添加到总像素列表

        print(f"总共读取了 {len(all_pixels)} 个像素值。")

        # 3. 验证像素总数是否与预期相符
        expected_pixels = width * height
        if len(all_pixels) != expected_pixels:
            print(f"警告：读取的像素数 ({len(all_pixels)}) 与期望的 ({expected_pixels}) 不符！")
            print("请确保 image_data.txt 文件中的数据已复制完整。")
            return # 如果像素数不对，则停止执行

        # 4. 创建图像
        # 将一维的像素列表转换为 NumPy 数组，类型为8位无符号整数
        image_array = np.array(all_pixels, dtype=np.uint8)
        
        # 将一维数组重塑为 (高度 x 宽度) 的二维矩阵
        image_matrix = image_array.reshape((height, width))

        # 使用Pillow库从二维矩阵创建图像对象 ('L' 模式代表8位灰度图)
        img = Image.fromarray(image_matrix, 'L')

        # 5. 保存图像
        img.save(output_path)
        print(f"成功！图像已保存到: '{output_path}'")

    except FileNotFoundError:
        print(f"错误: 文件 '{input_path}' 未找到。请确保它和脚本在同一个文件夹下。")
    except Exception as e:
        print(f"处理过程中发生了一个错误: {e}")

# --- 运行主函数 ---
if __name__ == "__main__":
    convert_text_to_image(INPUT_FILE, OUTPUT_FILE)